#include <iostream>
#include <cstring>
using namespace std;

class String
{
public:
    char *str;
    unsigned len;
    String(const char *p)
    {
        len = std::strlen(p);
        str = new char[len + 1];
        for (int i = 0; i < len; i++)
        {
            str[i] = p[i];
        }
    }
    ~String()
    {
        delete[] str;
    }
    String operator+(const String &b)
    {                                            // 最好是 const T&，避免复制开销
        char *newstr{new char[len + b.len + 1]}; // 分配新的空间，大小为两个长度相加
        std::strcpy(newstr, str);                // 把 a 的字符串复制到新空间的前半段
        std::strcpy(newstr + len, b.str);        // 把 b 的字符串复制到新空间的后半段
        String result(newstr);                   // 从这个新空间建立新的 String 对象
        delete[] newstr;                         // 现在可以删除新空间了（因为数据复制到 result 里去了）
        return result;                           // 把 result 返回就可以
    }
};
int main()
{
    String s1("123");
    String s2("456");
    String s3 = s1 + s2;
    cout << s3.str << endl;
}
